// ----------------------------------------------------------
// This Source Code Form is subject to the terms of the
// Mozilla Public License, v.2.0. If a copy of the MPL
// was not distributed with this file, You can obtain one
// at http://mozilla.org/MPL/2.0/.
// ----------------------------------------------------------
// Codebase: https://github.com/ArKuznetsov/cpdb/
// ----------------------------------------------------------

#Использовать nextcloud-lib

Перем Адрес;           // - Строка                  - адрес сервера NextCloud
Перем Пользователь;    // - Строка                  - имя пользователя сервера NextCloud
Перем Соединение;      // - ПодключениеNextCloud    - соединение с сервером NextCloud

Перем Лог;             // - Объект    - объект записи лога приложения

#Область ПрограммныйИнтерфейс

// Функция - возвращает адрес сервера NextCloud
//
// Возвращаемое значение:
//   Строка    - адрес сервера NextCloud
//
Функция Адрес() Экспорт

	Возврат Адрес;

КонецФункции // Адрес()

// Функция - возвращает имя пользователя сервера NextCloud
//
// Возвращаемое значение:
//   Строка    - имя пользователя сервера NextCloud
//
Функция Пользователь() Экспорт

	Возврат Пользователь;

КонецФункции // Пользователь()

// Функция - возвращает соединение с сервером NextCloud
//
// Возвращаемое значение:
//   ПодключениеNextCloud    - соединение с сервером NextCloud
//
Функция Соединение() Экспорт

	Возврат Соединение;

КонецФункции // Соединение()

// Создает соединение с сервером NextCloud с указанными параметрами
//
// Параметры:
//    _Адрес           - Строка    - адрес сервера NextCloud
//    _Пользователь    - Строка    - имя пользователя сервера NextCloud
//    Пароль           - Строка    - пароль пользователя сервера NextCloud
//
Процедура УстановитьПараметрыСоединения(Знач _Адрес, Знач _Пользователь, Знач Пароль = "") Экспорт

	Адрес = _Адрес;
	Пользователь = _Пользователь;

	Соединение = Новый ПодключениеNextCloud(Адрес, Пользователь, Пароль);

КонецПроцедуры // УстановитьПараметрыСоединения()

// Создает каталог в сервисе NextCloud
//
// Параметры:
//   ЦелевойПуть    - Строка    - путь к создаваемому каталогу
//
Процедура СоздатьКаталог(Знач ЦелевойПуть) Экспорт

	Попытка
		Соединение.Файлы().СоздатьКаталог(ЦелевойПуть);
		Лог.Информация("Создан каталог ""%1"" на сервисе NextCloud", ЦелевойПуть);
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстОшибки = СтрШаблон("Ошибка при создании каталога ""%1"" на сервисе NextCloud: %2%3",
		                        ЦелевойПуть,
		                        Символы.ПС,
		                        ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;
	
КонецПроцедуры // СоздатьКаталог()

// Процедура - отправляет файл в сервис NextCloud
//
// Параметры:
//   ПутьКФайлу       - Строка                  - путь к отправляемому файлу
//   ЦелевойПуть      - Строка                  - путь к каталогу в сервисе NextCloud, куда будет загружен файл
//   Перезаписывать   - Булево                  - перезаписать файл в сервисе NextCloud при загрузке
//
Процедура ОтправитьФайл(Знач ПутьКФайлу, Знач ЦелевойПуть, Перезаписывать = Ложь) Экспорт
	
	ПутьКФайлу = ФС.ПолныйПуть(ПутьКФайлу);

	Лог.Информация("Начало отправки файла в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);

	ИсходныйФайл = Новый Файл(ПутьКФайлу);
	
	Попытка
		Соединение.Файлы().Отправить(ИсходныйФайл.ПолноеИмя, ЦелевойПуть, ИсходныйФайл.Имя, Перезаписывать);
		Лог.Информация("Файл загружен в сервис NextCloud ""%1"" -> ""%2""", ПутьКФайлу, ЦелевойПуть);
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстОшибки = СтрШаблон("Ошибка загрузки файла ""%1"" в ""%2/%1"":%3%4",
		                        ИсходныйФайл.Имя,
		                        ЦелевойПуть,
		                        Символы.ПС,
		                        ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;

КонецПроцедуры // ОтправитьФайл()

// Функция - получает файл из сервиса NextCloud
//
// Параметры:
//   ПутьНаДиске        - Строка                  - расположение файла на сервисе NextCloud
//   ЦелевойКаталог     - Строка                  - путь к каталогу, куда будет загружен файл
//   УдалитьИсточник    - Булево                  - Истина - удалить файл после загрузки
//
// Возвращаемое значение:
//   Строка    - путь к полученному файлу
//
Функция ПолучитьФайл(Знач ПутьНаДиске, Знач ЦелевойКаталог, УдалитьИсточник = Ложь) Экспорт
	
	ЧастиПути = РаботаСФайлами.ЧастиПути(ПутьНаДиске);

	ЦелевойПуть = ОбъединитьПути(ЦелевойКаталог, ЧастиПути.Имя);

	ЦелевойПуть = ФС.ПолныйПуть(ЦелевойПуть);

	Лог.Информация("Начало получения файла из сервиса NextCloud ""%1"" -> ""%2""", ПутьНаДиске, ЦелевойПуть);

	Попытка
		Соединение.Файлы().Получить(ПутьНаДиске, ЦелевойПуть, Истина);

		Лог.Информация("Файл ""%1"" получен из сервиса NextCloud", ЦелевойПуть);
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстОшибки = СтрШаблон("Ошибка получения файла ""%1"" из сервиса NextCloud: %2%3",
		                        ПутьНаДиске,
		                        Символы.ПС,
		                        ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;

	Если УдалитьИсточник Тогда
		Удалить(ПутьНаДиске);
	КонецЕсли;
	
	Возврат ЦелевойПуть;

КонецФункции // ПолучитьФайл()

// Функция - проверяет существование файла / каталога в сервиса NextCloud
//
// Параметры:
//   ПутьНаДиске    - Строка    - расположение файла на сервисе NextCloud
//
// Возвращаемое значение:
//   Булево    - Истина - файл / каталог существует
//
Функция Существует(Знач ПутьНаДиске) Экспорт
	
	Результат = Ложь;

	Попытка
		Результат = Соединение.Файлы().Существует(ПутьНаДиске);
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстОшибки = СтрШаблон("Ошибка проверки существования файла ""%1"" в сервисе NextCloud: %2%3",
		                        ПутьНаДиске,
		                        Символы.ПС,
		                        ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;

	Возврат Результат;

КонецФункции // Существует()

// Процедура - удаляет файл из сервиса NextCloud
//
// Параметры:
//   ПутьНаДиске    - Строка    - расположение файла на сервисе NextCloud
//
Процедура Удалить(Знач ПутьНаДиске) Экспорт
	
	Попытка
		Соединение.Файлы().Удалить(ПутьНаДиске);

		Лог.Информация("Удален файл ""%1"" из сервиса NextCloud", ПутьНаДиске);
	Исключение
		ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстОшибки = СтрШаблон("Ошибка удаления файла ""%1"" из сервиса NextCloud: %2%3",
		                        ПутьНаДиске,
		                        Символы.ПС,
		                        ТекстОшибки);
		ВызватьИсключение ТекстОшибки;
	КонецПопытки;

КонецПроцедуры // Удалить()

#КонецОбласти // ПрограммныйИнтерфейс

#Область ОбработчикиСобытий

// Процедура - обработчик события "ПриСозданииОбъекта"
//
// Параметры:
//    _Адрес           - Строка    - адрес сервера NextCloud
//    _Пользователь    - Строка    - имя пользователя сервера NextCloud
//    Пароль           - Строка    - пароль пользователя сервера NextCloud
//
// BSLLS:UnusedLocalMethod-off
Процедура ПриСозданииОбъекта(Знач _Адрес, Знач _Пользователь, Знач Пароль = "") Экспорт

	Лог = ПараметрыСистемы.Лог();

	УстановитьПараметрыСоединения(_Адрес, _Пользователь, Пароль);

КонецПроцедуры // ПриСозданииОбъекта()
// BSLLS:UnusedLocalMethod-on

#КонецОбласти // ОбработчикиСобытий
